package org.nfyszny.zzzs.modules.utils;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.*;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;


/**
 * @author 笑小枫
 * @date 2022/8/15
 * @see <a href="https://www.xiaoxiaofeng.com">https://www.xiaoxiaofeng.com</a>
 */
public class PdfUtil {
    public static void main(String[] args) throws IOException {
        PdfReader reader=new PdfReader
                ("F:/mb.pdf");
        System.out.println("reader = " + reader);
    }
    private PdfUtil() {

    }

    /**
     * 利用模板生成pdf
     *
     * @param data         写入的数据
     * @param out          自定义保存pdf的文件流
     * @param templatePath pdf模板路径
     */
    public static void fillTemplate(Map<String, Object> data, FileOutputStream out, String templatePath) {
        PdfReader reader;
        ByteArrayOutputStream bos;
        PdfStamper stamper;
        try {
            // 读取pdf模板
            reader = new PdfReader("E:\\mb.pdf");
            bos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, bos);
            AcroFields acroFields = stamper.getAcroFields();
            // 赋值
            for (String name : acroFields.getFields().keySet()) {

                String value = data.get(name) != null ? data.get(name).toString() : null;
                System.out.println("value=>"+value);
                acroFields.setField(name, value);
            }

//            // 图片赋值
//            for (Map.Entry<String, String> entry : photoMap.entrySet()) {
//                if (Objects.isNull(entry.getKey())) {
//                    continue;
//                }
//                String key = entry.getKey();
//                String url = entry.getValue();
//                // 根据地址读取需要放入pdf中的图片
//                Image image = Image.getInstance(url);
//                // 设置图片在哪一页
//                PdfContentByte overContent = stamper.getOverContent(acroFields.getFieldPositions(key).get(0).page);
//                // 获取模板中图片域的大小
//                Rectangle signRect = acroFields.getFieldPositions(key).get(0).position;
//                float x = signRect.getLeft();
//                float y = signRect.getBottom();
//                // 图片等比缩放
//                image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
//                // 图片位置
//                image.setAbsolutePosition(x, y);
//                // 在该页加入图片
//                overContent.addImage(image);
//            }

            // 如果为false那么生成的PDF文件还能编辑，一定要设为true
            stamper.setFormFlattening(false);
            stamper.close();
            Document doc = new Document();

            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();
            PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importPage);
            doc.close();
            bos.close();

        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        }
    }


}


